package thread;

import java.util.Scanner;

/**
 * java中所有的代码都是线程运行的，main方法也不例外，执行main方法的线程称为"主线程"
 * 是由JVM创建的。
 *
 * 线程提供了一个静态方法:
 * static Thread currentThread()
 * 该方法可以获取运行这个方法的线程
 *
 * 后面会学习到一个API:ThreadLocal，内部就是靠该方法区分线程的
 */
public class CurrentThreadDemo {
    //main方法是靠主线程执行的
    public static void main(String[] args) {
        //主线程执行到这里
        Thread main = Thread.currentThread();
        System.out.println("主线程:"+main);
        doSome();//主线程执行该方法

        //自定义一个线程
        Thread t = new Thread(){
            public void run(){
                Thread t = Thread.currentThread();
                System.out.println("自定义线程:"+t);
                doSome();
            }
        };
        t.start();

    }

    public static void doSome(){
        Thread t = Thread.currentThread();
        System.out.println("执行doSome方法的线程是:"+t);
    }

    /**
     * Sleep阻塞
     * 线程提供了一个静态方法:
     * static void sleep(long ms)
     * 该方法可以让执行该方法的线程进入阻塞状态指定毫秒，超时后线程会主动回到RUNNABLE状态再次开始并发
     */
    public static class SleepDemo {
        public static void main(String[] args) {
            // 程序启动提示
            System.out.println("程序开始了");

            // 创建 Scanner 对象，用于读取控制台输入
            Scanner scanner = new Scanner(System.in);
            System.out.println("请输入一个数字:");

            // 获取用户输入的数字，并开始倒计时
            for (int num = scanner.nextInt(); num > 0; num--) {
                // 输出当前倒计时数值
                System.out.println(num);

                try {
                    // 主线程休眠 1 秒
                    Thread.sleep(1000); // 主线程在这里"卡住"1秒钟
                } catch (InterruptedException e) {
                    // 捕获并处理线程中断异常
                    e.printStackTrace();
                }
            }

            // 倒计时结束，输出提示信息
            System.out.println("时间到");
            System.out.println("程序结束了");
        }
    }
}
